"""

目的 登录
https://passport.bilibili.com/login?from_spm_id=333.337.top_bar.login_window
拿到 cookie


路程
1输入账户密码
2点击登录
3生成验证码
4将整张网页截下来  单独将验证码截取保存
# 注意确认裁剪位置以及坐标时都用画图工具打开
5传递给第三方平台 进行打码  （返回坐标）
6通过坐标进行点击
7点击确定


打码登陆以后 会有一个验证    手机验证码
"""
import json
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image
from selenium.webdriver import ActionChains
from interface_w import chaojiyin
def selenium_w():
    # 去除正在被自动化测试工具操作
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_argument('--incognito')
    driver=webdriver.Chrome(executable_path=r'D:\六星教育\2203期\2022_3_python\15.selenium点选操作\chromedriver.exe',options=options)
    # 向有图书关键字对应网页的url发送请求
    driver.get("https://passport.bilibili.com/login?from_spm_id=333.337.top_bar.login_window")
    driver.maximize_window()

#     登录位置
    user=driver.find_element(By.XPATH,'//*[@id="login-username"]').send_keys("18888888888")
    # user
    time.sleep(0.85)
    # 密码位置
    password=driver.find_element(By.XPATH,'//*[@id="login-passwd"]').send_keys("696969")
    # password
    time.sleep(0.85)
#     点击登录 】
    click_den=driver.find_element(By.XPATH,'//*[@id="geetest-wrap"]/div/div[5]/a[1]').click()
    time.sleep(0.85)

#     截整个页面的图
    driver.save_screenshot("哔哩哔哩.png")
    # 对验证码进行裁剪
    # 文件对象打开
    new_img=Image.open("./哔哩哔哩.png")
    # 坐标左x上y右x下y的顺序 传递
    imag_w=new_img.crop((1068,239,1341,542))
    imag_w.save("imag1.png")
    # 传递给第三方平台
    # 进行打码  （返回坐标）
    # 100,99|x2,y2|x3,y3
    xy=chaojiyin()
    # 100,99 , 88,77 , 35,71
    places=xy.split("|")
    print(places)
    # 有几个坐标就点击几次 因此拿坐标的数量作为循环次数
    for place in places:
        x=int(place.split(",")[0])
        y=int(place.split(",")[1])
        print("x",x)
        print("y",y)
        # 进行点击
        # x=(屏幕最左边到验证码位置的距离+x)
        # y=(屏幕最上边到验证码位置的距离+y)
        ActionChains(driver).move_by_offset(1068+x,240+y).click().perform()
        # 在进行点击以后 要将位置归零
        ActionChains(driver).move_by_offset(-(1068 + x), -(240 + y)).click().perform()
        print("在点击")
    #     点击验证码确定
    driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[6]/div/div/div[3]/a/div').click()
    # 中间会有手机验证码验证
    time.sleep(50)
    cooki=driver.get_cookies()
    cookie_str=json.dumps(cooki)
    with open("b站cookie.txt","w",encoding="utf-8")as f:
        f.write(cookie_str)
    driver.close()
    driver.quit()


if __name__ == '__main__':
    selenium_w()